<?php 
require 'tag/tag.php';

// 解析变量中的模板和标签
class Compile extends Tag
{
	// 引入全局变量   模板内容
	protected $content;

	function __construct(){}

	//解析类入口
	protected function compileTpl($content)
	
	{
		$this->content = $content;

		// 解析变量
		$this->parseVars();

		$this->parseTag();

		return $this->content;

	}

	// 第一部分 解析变量函数 把{{$web}}  解析成 替换成 <?php echo $web;? >
	
	private function parseVars()
	{	
		// 正则替换规则
		$pattern = '/\{\{(.*?)\}\}/i';
		//替换内容
		$replacement = '<?php echo \1;?>';
		// 执行正则替换
		$this->content = preg_replace($pattern,$replacement,$this->content);
	}



	// 第二部分
	private function parseTag()
	{	

		$obj = new Tag;
		//获取对象属性
		$tags = $obj->tag;
		// 遍历属性
		// print_r($tags);exit;  
		// 打印结果 Array ( [news] => 1 [stu] => 1 [foreach] => 1 )  1为对标签  0为单标签
		foreach($tags as $tag=>$params)
		{	
			// 正则替换规则      <stu row='10' where="sex=2">内容</stu>
			$preg = '/<'.$tag.'(.*?)>(.*?)<\/'.$tag.'>/is';
			// print_r($preg);exit;
			// 匹配所有的数据 如果有返回次数
			if (preg_match_all($preg, $this->content, $matches,PREG_SET_ORDER)) {
				// print_r($matches);exit;
				foreach ($matches as $v) {
					// 标签的属性
					// print_r($v);exit;
					// print_r($v[1]);exit;
					// 打印结果
					$attr=$this->getTagAttr($v[1]);    
					// 获得里面的属性  <stu row='10' where="sex=2">  <stu row='3'>
					// Array ( [row] => 10 [where] => sex=2 ) Array ( [row] => 10 [where] => sex=2 ) 
					// print_r($arr);exit;
					
					// 标签内容
					$body = $v[2];
					// print_r($body);exit;
					//打印结果：//<?php echo $field['username'];<?php echo $field['sex'];
					$method = '_'.$tag;  //_stu....
					$replace = $obj->$method($attr,$body);

					$this->content=str_replace($v[0], $replace,$this->content);


				}
			}
			
		}

	}

	//获得标签的属性
	private function getTagAttr($str)
	{	
		$attr=[];
		// 匹配正则规则  row='10' where="sex=2"
		$preg = '/(\w+?)=[\'"](.+?)[\'"]/i';  //PREG_SET_ORDER  排序
		if (preg_match_all($preg, $str, $matches,PREG_SET_ORDER)) {
			foreach ($matches as $k) {
				// print_r($k);exit;
				$attr[$k[1]]=$k[2];
				// 打印结果 Array ( [row] => 10 ) Array ( [row] => 10 [where] => sex=2 ) Array ( [row] => 3 ) 
				// print_r($attr);
				
			}
		}
		// print_r($attr);
		// 打印结果
		// Array ( [row] => 10 [where] => sex=2 ) Array ( [row] => 3 ) 
		return $attr;
	}

}
// 标签属性的解析
// Array
// (
//     [0] => row='10'
//     [1] => row
//     [2] => 10
// )


 ?>